package com.cg.bank.dao;

import com.cg.bank.domain.Transaction;
import com.cg.bank.domain.User;
import com.cg.bank.util.Page;

import java.util.List;

/**
 * @author chunges
 * @version V1.0
 * @Description BankDao实现对证书存储介质的操作
 * @date 2018年6月20日 下午3:48:44
 */

public interface BankDao {
    /**
     * 添加用户
     *
     * @param user
     */
    void addUser(User user);

    /**
     * 更新交易信息
     *
     * @param transaction 交易信息
     */
    void addTransactionRecord(Transaction transaction);

    /**
     * 更新用户信息
     *
     * @param user
     */
    void updateUserInformation(User user);

    /**
     * 更新交易信息
     *
     * @param transaction
     */
    void updateTransactionRecord(Transaction transaction);

    /**
     * 更新账户余额
     *
     * @param accountID
     */
    void updateBalance(int accountID, double money);

    /**
     * 根据用户ID获取用户信息
     *
     * @param accountID
     * @return
     */
    User getUserById(int accountID);

    /**
     * 根据账户获取用户信息
     *
     * @param account
     * @return
     */
    User getUserByAccount(String account);

    /**
     * 获取所有用户
     *
     * @return
     */
    List<User> getAllUsers();

    /**
     * 根据账户获取余额信息
     *
     * @param accountID 账号ID
     * <p>注意；将获得当前历史版本(可能其他事物正在操作)余额</P>
     * @return
     */
    double getBalanceByAccount(int accountID);

    /**
     * 获取指定用户交易记录.
     * @param accountID 账户ID
     * @param page 分页器
     * 
     * @return 交易记录结果集
     */
    List<Transaction> getTransactionRecordByAccount(int accountID, Page page);

    /**
     * 获取所有交易记录
     * 
     * @param page 分页器
     * @return 交易记录结果集
     */
    List<Transaction> getAllTransactionRecord(Page page);
    
    /**
     * 获取指定用户交易记录总数
     * 
     * @return 交易记录结果集
     */
    int getTransactionCountsByAccount(int accountID);
    
    /**
     * 获取所有交易记录总数
     * 
     * @return 交易记录结果集
     */
    int getTransactionCounts();
    
    /**
     * 根据账户删除用户
     *
     * @param accountID
     */
    void deleteUserByAccount(int accountID);
}